package com.equipo7.sevenmap;

import java.util.ArrayList;
import java.util.List;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class SevenMapHandler extends DefaultHandler {
	
	private List<Punto> puntos = new ArrayList<Punto>();
	private Punto punto = new Punto();
	
	private boolean isPunto = false;
	private boolean isString = false;
	private boolean isLong = false;
	private boolean isDouble = false;
	private String property = new String();
	
	
	
	@Override
	public void startDocument() throws SAXException {
		
	}

	@Override
	public void endDocument() throws SAXException {
		
	}
	
	@Override
	public void startElement(String namespaceURI, String localName,
			String qName, Attributes atts) throws SAXException {
		if (localName.equals("object")) {
			String attrValue = atts.getValue("class");
			if ("com.equipo7.sevenmapWs.model.Punto".equals(attrValue)) {
				isPunto = true;
				punto = new Punto();
			}
		} else if (localName.equals("void")) {
			property = atts.getValue("property");
		} else if (localName.equals("string")) {
			isString = true;
		} else if (localName.equals("long")) {
			isLong = true;
		} else if (localName.equals("double")) {
			isDouble = true;
		}
	}	
	
	@Override
	public void endElement(String namespaceURI, String localName, String qName)	throws SAXException {
		if ((localName.equals("object")) && isPunto){
			isPunto = false;
			puntos.add(punto);
		} else if (localName.equals("string")) {
			isString = false;
		} else if (localName.equals("long")) {
			isLong = false;
		} else if (localName.equals("double")) {
			isDouble = false;
		}
	}

	@Override
    public void characters(char ch[], int start, int length) {
		if (isPunto) {
			if (("denominacion".equals(property)) && isString)
				punto.setDenominacion(new String(ch, start, length));
			else if (("descripcion".equals(property)) && isString)
				punto.setDescripcion(new String(ch, start, length));
			else if (("id".equals(property)) && isLong)
				punto.setId(Long.parseLong(new String(ch, start, length)));
			else if (("idCategoria".equals(property)) && isLong)
				punto.setIdCategoria(Long.parseLong(new String(ch, start, length)));
			else if (("idMunicipio".equals(property)) && isLong)
				punto.setIdMunicipio(Long.parseLong(new String(ch, start, length)));
			else if (("idPais".equals(property)) && isLong)
				punto.setIdPais(Long.parseLong(new String(ch, start, length)));
			else if (("latitud".equals(property)) && isDouble)
				punto.setLatitud(Double.parseDouble(new String(ch, start, length)));
			else if (("longitud".equals(property)) && isDouble)
				punto.setLongitud(Double.parseDouble(new String(ch, start, length)));
		}
    }
	
	
	// getters & setters -------------------------------------------------------------
	
	public List<Punto> getPuntos() {
		return this.puntos;
	}
	
}
